package net.towee.client;

import net.towee.client.com.app.AppController;
import net.towee.client.com.app.Presenter;
import net.towee.client.com.app.RememberForm;
import net.towee.client.com.app.TopPanel;
import net.towee.client.com.app.UserFeedback;
import net.towee.client.com.dashboard.BoardEditor;
import net.towee.client.com.dashboard.DashBoardModule;
import net.towee.client.com.dashboard.GadgetPusher;
import net.towee.client.com.lobby.LobbyModule;
import net.towee.client.com.lobby.presenter.LobbyGroupsPresenter;
import net.towee.client.com.lobby.presenter.LobbyHelpPresenter;
import net.towee.client.com.lobby.presenter.LobbyNicknamePresenter;
import net.towee.client.com.lobby.presenter.LobbyPeoplePresenter;
import net.towee.client.com.lobby.presenter.LobbyProfilePresenter;
import net.towee.client.com.me.AccountPhoto;
import net.towee.client.com.me.MeModule;
import net.towee.client.com.repo.RepositoryDocumentEditor;
import net.towee.client.com.repo.RepositoryDocumentShower;
import net.towee.client.com.repo.RepositoryExplorer;
import net.towee.client.com.repo.RepositoryModule;
import net.towee.client.com.repo.RepositoryNodeCreator;
import net.towee.client.com.repo.RepositoryNodeSelector;
import net.towee.client.com.repo.RepositoryShower;
import net.towee.client.com.repo.RepositoryTreeNodeShower;
import net.towee.client.com.stuff.GroupShower;
import net.towee.client.com.stuff.StuffModule;
import net.towee.client.i18n.ToweeConstants;
import net.towee.client.managers.AccountHelper;
import net.towee.client.managers.AccountsManager;
import net.towee.client.widgets.upload.UploadForm;

import com.google.gwt.inject.client.GinModules;
import com.google.gwt.inject.client.Ginjector;

@GinModules({ ToweeMainModule.class, LobbyModule.class, MeModule.class, 
	DashBoardModule.class, RepositoryModule.class, StuffModule.class })

public interface ToweeGinjector extends Ginjector {
	ToweeGinjector getGinjector();
	ToweeConstants getConstants();
	
	// The main blocks controllers
	TopPanel getTopPanel();
	AppController getController();

	// Managers
	AccountHelper getAccountHelper();
	AccountsManager getAccountsManager();
	
	// Lobby
	LobbyNicknamePresenter getLobbyNicknameStep();
	LobbyProfilePresenter getLobbyProfileStep();
	LobbyGroupsPresenter getLobbyGroupsStep();
	LobbyPeoplePresenter getLobbyPeopleStep();
	LobbyHelpPresenter getLobbyHelpStep();

	// Me
	AccountPhoto getAccountPhoto();

	// DashBoard
	BoardEditor getBoardEditor();
	GadgetPusher getGadgetPusher();
	
	// Repository
	RepositoryExplorer getRepositoryExplorer();
	RepositoryTreeNodeShower getRepositoryTreeNodeShower();
	RepositoryDocumentShower getRepositoryDocumentShower();
	RepositoryDocumentEditor getRepositoryDocumentEditor();
	RepositoryNodeCreator getRepositoryNodeCreator();
	RepositoryNodeSelector getRepositoryNodeSelector();
	RepositoryShower getRepositoryShower();
	
	// Stuff
	GroupShower getGroupShower();
	
	UserFeedback getFeedbackPanel();
	RememberForm getRememberForm();

	// XMPP Client
	//XmppSession getXmppSession();
	//ChatManager getChatManager();
	//PresenceManager getPresenceManager();
}